#include "apm32f402_403.h"
#include "apm32f402_403_rcm.h"
#include "apm32f402_403_gpio.h"

/**
LED2: PB6
LED3: PB7
KEY1: PA1
*/

void initLed() 
{
	GPIO_Config_T GPIO_ConfigStruct = {0U};

    /* Enable the GPIO_LED Clock */
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOB);

    /* Configure the GPIO_LED pin */
    GPIO_ConfigStruct.pin = GPIO_PIN_6 | GPIO_PIN_7;
    GPIO_ConfigStruct.mode = GPIO_MODE_OUT_PP;
    GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;

    GPIO_Config(GPIOB, &GPIO_ConfigStruct);
}

uint32_t getLED2State()
{
    return GPIO_ReadInputBit(GPIOB, GPIO_PIN_6);
}

void initKey() 
{
	GPIO_Config_T GPIO_ConfigStruct = {0U};

    /* Enable the GPIO_LED Clock */
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);

    /* Configure the GPIO_LED pin */
    GPIO_ConfigStruct.pin = GPIO_PIN_1;
    GPIO_ConfigStruct.mode = GPIO_MODE_IN_PU;
    GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;

    GPIO_Config(GPIOA, &GPIO_ConfigStruct);
}


uint32_t getKeyState()
{
    return GPIO_ReadInputBit(GPIOA, GPIO_PIN_1);
}


int main(void) 
{
	initLed();
	initKey();
	while(1)
	{
		// 执行代码
		if (getKeyState() == RESET)
        {
            /* 点亮和关闭 LED2和LED3 */
			if (getLED2State() == RESET)
			{
				GPIO_SetBit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
			} 
			else 
			{
				GPIO_ResetBit(GPIOB, GPIO_PIN_6 | GPIO_PIN_7);
			}

            while (getKeyState() == RESET);
        }
		
	}
}